#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <stdint.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <dlfcn.h>
#include <pthread.h>
#include <linux/fb.h>
#include <sys/ipc.h>
#include <sys/shm.h>


int main(int argc, char const *argv[])
{
    int fd[2];
    pipe(fd);
    // fd[0] / fd[1]

    if(fork() > 0)
    {
        // fd[0] / fd[1]
        // 将标准输出重定位到管道的写端，确保ls可以将结果输入到管道
        dup2(fd[1], STDOUT_FILENO);
        close(fd[0]);
        execlp("ls", "ls", "/etc/", NULL);
    }
    else
    {
        // fd[0] / fd[1]
        // 将标准输入重定位到管道的读端，确保wc可以从管道读取数据
        dup2(fd[0], STDIN_FILENO);

        // 此处的fd[1]必须关闭，否则wc会一直阻塞等待管道的数据
        close(fd[1]);
        execlp("wc", "wc", "-w", NULL);
    }

    return 0;
}
